/*!
 @file MujiDubCoreLibraryEnums.h
 @framework MujiDubCoreLibrary

 @author Created by Matt Austin on 3/18/15.
 @copyright Copyright (c) 2015 EnglishCentral, Inc. All rights reserved.
*/

#ifndef MujiDubCoreLibrary_MujiDubCoreLibraryEnums_h
#define MujiDubCoreLibrary_MujiDubCoreLibraryEnums_h
#import <Foundation/Foundation.h>

typedef NS_ENUM(NSUInteger, MujiDubSampleRate)
{
    /*!
     @constant MujiDubSampleRate8000Hz
     */
    MujiDubSampleRate8000Hz  = 8000,
    /*!
     @constant MujiDubSampleRate16000Hz
     */
    MujiDubSampleRate16000Hz = 16000,
    /*!
     @constant MujiDubSampleRate32000Hz
     */
    MujiDubSampleRate32000Hz = 32000,
    /*!
     @constant MujiDubSampleRate44000Hz
     */
    MujiDubSampleRate44000Hz = 44100
};

/*!
 @typdef enum MujiDubNumberOfChannels
 */
typedef NS_ENUM(NSUInteger, MujiDubNumberOfChannels)
{
    /*!
     @constant MujiDubNumberOfChannelsMono
     */
    MujiDubNumberOfChannelsMono   = 1,
    /*!
     @constant MujiDubNumberOfChannelsStereo
     */
    MujiDubNumberOfChannelsStereo = 2
};

/*!
 @abstract Defines the EnglishCentral SDK Error codes.
 */
typedef NS_ENUM(NSUInteger, MujiDubErrorCode){
    /*!
     
     */
    MujiDubErrorCodeUnknown,
    /*!
    
     */
    MujiDubErrorCodeGeneral,
    /*!
    
     */
    MujiDubErrorCodeWavParserIncorrectFileSize,
    /*!
     
     */
    MujiDubErrorCodeWavParserContainerIDNotFound,
    /*!
    
     */
    MujiDubErrorCodeWavParserFormatIDNotFound,
    /*!
     
     */
    MujiDubErrorCodeWavParserDataChunkIDNotFound,
    /*!
     
     */
    MujiDubErrorCodeWavParserAudioPropertiesNotExtracted,
    /*!
     
     */
    MujiDubErrorCodeSpeexEncoderFailedToAllocateEncoderState,
    /*!
     
     */
    MujiDubErrorCodeSpeexEncoderFailedToSetUpResampler,
    /*!
     
     */
    MujiDubErrorCodeSpeexEncoderFailedToObtainFrameSize,
    /*!
     
     */
    MujiDubErrorCodeSpeexEncoderFailedToObtainBitrate,
    /*!
     
     */
    MujiDubErrorCodeSpeexEncoderFailedToSetQuality,
    /*!
     
     */
    MujiDubErrorCodeSpeexEncoderNotEnoughDataToCreateSpeexHeader,
    /*!
     
     */
    MujiDubErrorCodeOggFailedToAllocateStreamState,
    /*!
     
     */
    MujiDubErrorCodeFailedToCreateFile,
    /*!
     
     */
    MujiDubErrorCodeInvalid,
    /*!
     
     */
    MujiDubErrorCodeAssetNotPlayable,
    /*!
     
     */
    MujiDubErrorCodeAssetBadMediaURL,
    /*!
     
     */
    MujiDubErrorCodeAssetFailedLoading,
    /*!
     
     */
    MujiDubErrorCodeAssetMaximumRetryReached,
    /*!
     
     */
    MujiDubErrorCodeAssetPlaybackTimeout,
    /*!
     
     */
    MujiDubErrorCodeDownloadingOfContentFailed,
    /*!
     
     */
    MujiDubErrorCodeUserAccountNotLoggedIn,
    /*!
     
     */
    MujiDubErrorCodeUserAccountDoesNotContainStudentClassIDs,
    /*!
     
     */
    MujiDubErrorCodePurchasedInAppProductNotFound,
    /*!
     
     */
    MujiDubErrorCodeCannotConnectToAppStore,
    /*!
     
     */
    MujiDubErrorCodeFailedToProcessPayment,
    /*!
     
     */
    MujiDubErrorCodeSpeechDialogLineAnalysisResultRejected,
    MujiDubErrorCodeGenericSpeechAnalysisError,
    MujiDubErrorCodeInvalidDialogLineSpeechUploadRecord,
    MujiDubErrorCodeInvalidDeviceToken,
    MujiDubErrorCodeAccountRegistrationFailure,
    MujiDubErrorCodeMediaCacheImageDownloadFailure,
    MujiDubErrorCodeMediaCacheAudioDownloadFailure,
    MujiDubErrorCodeMediaCacheInvalidURL,
    MujiDubErrorCodeRequestSerializationInvalidRequest,
    /*
     Paywall Error Codes
     */
    MujiDubErrorCodeInAppPurchaseNotEnabled,
    MujiDubErrorCodePaymentAlreadyProcessing,
    MujiDubErrorCodePaymentAlreadyPurchased,
    MujiDubErrorCodePaymentIsRestoring,
    MujiDubErrorCodePaymentIsPendingExternalAction,
    MujiDubErrorCodeUnableToCompleteTransaction,
    MujiDubErrorCodeSocialShareUserCancelled,
    MujiDubErrorCodeSocialShareGeneralError,
    MujiDubErrorCodeSocialShareNativeFacebookAppNotInstalled,
    
    /*
     Account Errors.
     */
    MujiDubErrorCodeMissingEmailPasswordError
};

typedef NS_ENUM(NSUInteger, MujiDubEnglishCentralEndpointHost)
{
    MujiDubEnglishCentralEndpointHostBridge = 0UL,
    MujiDubEnglishCentralEndpointHostBridgeOpen,
    MujiDubEnglishCentralEndpointHostReportCard,
    MujiDubEnglishCentralEndpointHostPostoffice,
    MujiDubEnglishCentralEndpointRecognizer
};

/*!
 @abstract Provides the reachability status.
 
 @discussion These constants will provide the network reachability status.
 */
typedef NS_ENUM(NSUInteger, MujiDubNetworkReachabilityStatus){
    /*!
     The network is not reachable.
     */
    MujiDubNetworkReachabilityStatusNotReachable,
    /*!
     The network is currently connected via Wifi
     */
    MujiDubNetworkReachabilityStatusReachableViaWifi,
    /*!
     The network is currently connected via WWAN.
     */
    MujiDubNetworkReachabilityStatusReachableViaWWAN
};

typedef NS_ENUM(NSUInteger, MujiDubDialogLineRecordingState){
    /*!
     Recording.
     */
    MujiDubDialogLineRecordingStateRecording,
    /*!
     Cancelled.
     */
    MujiDubDialogLineRecordingStateCancelled,
    /*!
     Paused.
     */
    MujiDubDialogLineRecordingStatePaused,
    /*!
     Failed.
     */
    MujiDubDialogLineRecordingStateFailed,
    /*!
     Successful.
     */
    MujiDubDialogLineRecordingStateSuccessful
};


#endif
